package com.hospital.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hospital.entity.MedicalRecord;

import java.util.List;
import java.util.Map;

/**
 * 就诊记录服务接口
 *
 * @author Hospital Management System
 */
public interface MedicalRecordService extends IService<MedicalRecord> {

    /**
     * 获取医生的就诊记录
     */
    List<MedicalRecord> getDoctorMedicalRecords(String patientName);

    /**
     * 分页获取医生的就诊记录
     */
    Map<String, Object> getDoctorMedicalRecordsWithPagination(Long doctorId, String patientName, 
                                                              Integer status, Integer page, Integer size);

    /**
     * 获取就诊记录列表（管理员用）
     */
    List<MedicalRecord> getMedicalRecords(String keyword);

    /**
     * 分页获取就诊记录列表（管理员用）
     */
    Map<String, Object> getMedicalRecordsWithPagination(String patientName, String doctorName, 
                                                        Integer status, Integer page, Integer size);

    /**
     * 获取用户的就诊记录
     */
    List<MedicalRecord> getUserMedicalRecords(Long userId);

    /**
     * 填充关联信息（患者姓名、医生姓名、科室名称）
     */
    void fillRelatedInfo(MedicalRecord record);

    /**
     * 批量填充关联信息
     */
    void fillRelatedInfo(List<MedicalRecord> records);

    /**
     * 分配病房床位
     *
     * @param recordId 就诊记录ID
     * @param wardId 病房ID
     * @param bedNumber 床位号
     * @param estimatedDays 预计住院天数
     * @return 是否分配成功
     */
    boolean assignBed(Long recordId, Long wardId, Integer bedNumber, Integer estimatedDays);

    /**
     * 办理入院
     *
     * @param recordId 就诊记录ID
     * @return 是否入院成功
     */
    boolean admission(Long recordId);

    /**
     * 办理出院
     *
     * @param recordId 就诊记录ID
     * @return 是否出院成功
     */
    boolean discharge(Long recordId);

    /**
     * 获取病房可用床位列表
     *
     * @param wardId 病房ID
     * @return 可用床位号列表
     */
    List<Integer> getAvailableBeds(Long wardId);
} 